/*
 * Redefine.java
 *
 * Created on 20 marzo 2004, 1.04
 */

package net.ermannofranco.xml.schema;


/**
 *
 * @author  ermanno (ermanno.franco@gmail.com)
 */
public class Redefine extends SchemaTag	{
  
  /**
	 * 
	 */
	private static final long serialVersionUID = 8078730293728879503L;
private boolean named;
  
  /** Creates a new instance of Redefine
   * Protetto
   * @param level livello di indentazione
   * @param container tag contenitore
   */
  protected Redefine(Schema container) {
    super("redefine",1,container);
  }
  
  /**
   * @param schemaLocation
   * @return
   */
  public Redefine setSchemaLocation(String schemaLocation)  {
    //Static.validateNMToken(namespace);
    
    addAttr("schemaLocation",schemaLocation);
    named=true;
    return this;
  }
  
  /**
   * @return
   */
  public SimpleType addSimpleType() {
    SimpleType att;
    add(att= new SimpleType(getLevel()+1,this));//vado ad aggiungerlo all'ArrayList della superclasse Tag
    return att;
  }
  
  /**
   * @return
   */
  public ComplexType addComplexType() {
    ComplexType ct;
    add(ct=new ComplexType(getLevel()+1, this));//vado ad aggiungerlo all'ArrayList della superclasse Tag
    return ct;
  }
  
  /**
   * @return
   */
  public AttributeGroup addAttributeGroup() {
    AttributeGroup ct;
    add(ct=new AttributeGroup(getLevel()+1, this));//vado ad aggiungerlo all'ArrayList della superclasse Tag
    return ct;
  }
  
  /**
   * @return
   */
  public Group addGroup() {
    Group ct;
    add(ct=new Group(getLevel()+1, this));//vado ad aggiungerlo all'ArrayList della superclasse Tag
    return ct;
  }
  
  /** aggiunge un tag Annotation che contiene un tag Documentation
   * @param explanation Stringa di documentazione
   * @return autoriferimento all'oggetto corrente
   */
  public Redefine addDocumentation(String explanation) {
    addAnnotation().addDocumentation(explanation);
    return this;
  }
  /** aggiunge un tag Annotation che contiene un tag Documentation
   * @param explanation testo della documentazione
   * @param language attributo di xml:lang, seguire le regole di i18n
   * @return riferimento all'oggetto corrente
   */
  public Redefine addDocumentation(String explanation,String language) {
    addAnnotation().addDocumentation(explanation,language);
    return this;
  }
  
  /** semplica override di convalida
   * @return super.toString()
   */
  public String toPrint()  {
    if (!named) throw new SchemaException("schemaLocation e' obbligatorio, "+getClass().getName()+":("+getName()+")");
    return super.toPrint();
  }
  public String toSave()  {
	    if (!named) throw new SchemaException("schemaLocation e' obbligatorio, "+getClass().getName()+":("+getName()+")");
	    return super.toSave();
	  }
}
